"use strict";
const path = require("path");

function resolve(dir) {
  return path.join(__dirname, dir);
}
const name = /* defaultSettings.title || */ "一网通办工作流"; // page title
// If your port is set to 80,
// use administrator privileges to execute the command line.
// For example, Mac: sudo npm run
const port = process.env.PORT || 8181; // dev port
// All configuration item explanations can be find in https://cli.vuejs.org/config/
const timeout = 10 * 60 * 1000;
const proxyTimeout = 10 * 60 * 1000;
module.exports = {
  /**
   * You will need to set publicPath if you plan to deploy your site under a sub path,
   * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
   * then publicPath should be set to "/bar/".
   * In most cases please use '/' !!!
   * Detail: https://cli.vuejs.org/config/#publicpath
   */
  publicPath: "/",
  outputDir: process.env.OUTPUTDIR || "dist",
  assetsDir: /* defaultSettings.assetsDir || */ "static",
  lintOnSave: false,
  // lintOnSave: process.env.NODE_ENV === 'development',
  productionSourceMap: false,
  pages: {
    index: {
      entry: "./src/main.js",
      template: "./public/index.html",
      filename: "index.html",
      chunks: ["runtime", "chunk-libs", "chunk-elementUI", "index"]
    }
  },
  devServer: {
    port: port,
    open: true,
    overlay: {
      warnings: false,
      errors: true
    },
    // openPage: '/dorm.html',
    proxy: {
      "/web": {
        proxyTimeout,
        timeout,
        target: "http://localhost:8081",
        changeOrigin: true,
        ws: false,
        // 加上autoRewrite属性，可以解决后台重定向的问题
        autoRewrite: true
      },
      "/online": {
        proxyTimeout,
        timeout,
        target: "http://localhost:8081",
        changeOrigin: true,
        ws: false
      },
      "/editor": {
        proxyTimeout,
        timeout,
        target: "http://localhost:8081",
        changeOrigin: true,
        ws: false
      }
    }
  },
  configureWebpack: config => {
    const configNew = {
      // provide the app's title in webpack's name field, so that
      // it can be accessed in index.html to inject the correct title.
      name: name,
      resolve: {
        alias: {
          "@": resolve("src")
        }
      }
    };
    configNew.externals = {
      "element-ui": "ELEMENT", //  配置element-ui
      vue: "Vue", // 配置vue
      echarts: "echarts" // 配置echarts，解决使用china.js时候，echarts会重新打包一份的问题
    };
    return configNew;
  },
  chainWebpack(config) {
    config.plugins.delete("preload"); // TODO: need test
    config.plugins.delete("prefetch"); // TODO: need test
    // set svg-sprite-loader
    config.module
      .rule("svg")
      .exclude.add(resolve("src/icons"))
      .add(resolve("src/components/form-design/icons"))
      .end();
    config.module
      .rule("icons")
      .test(/\.svg$/)
      .include.add(resolve("src/icons"))
      .add(resolve("src/components/form-design/icons"))
      .end()
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]"
      })
      .end();

    // set preserveWhitespace
    config.module
      .rule("vue")
      .use("vue-loader")
      .loader("vue-loader")
      .tap(options => {
        options.compilerOptions.preserveWhitespace = true;
        return options;
      })
      .end();

    config
      // https://webpack.js.org/configuration/devtool/#development
      .when(process.env.NODE_ENV === "development", config =>
        config.devtool("cheap-source-map")
      );

    config.when(
      // process.env.NODE_ENV !== 'development'
      process.argv[2] === "build",
      config => {
        // config
        //   .plugin('ScriptExtHtmlWebpackPlugin')
        //   .after('html')
        //   .use('script-ext-html-webpack-plugin', [{
        //   // `runtime` must same as runtimeChunk name. default is `runtime`
        //     inline: /runtime\..*\.js$/
        //   }])
        //   .end()
        config.optimization.splitChunks({
          chunks: "all",
          cacheGroups: {
            // default: false,
            // vendors: false,
            libs: {
              name: "chunk-libs",
              test: /[\\/]node_modules[\\/]/,
              priority: 10,
              chunks: "initial" // only package third parties that are initially dependent
            },
            // elementUI: {
            //   name: 'chunk-elementUI', // split elementUI into a single package
            //   priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
            //   // test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
            //   test: /node_modules[\\/]element-ui/,
            //   chunks: 'all'
            // },
            commons: {
              name: "chunk-commons",
              test: resolve("src/components"), // can customize your rules
              minChunks: 3, //  minimum common number
              priority: 5,
              reuseExistingChunk: true
            }
            // common: {
            //   name: `chunk-common`,
            //   minChunks: 2,
            //   priority: -20,
            //   chunks: 'initial',
            //   reuseExistingChunk: true
            // }
          }
        });
        config.optimization.runtimeChunk("single");
      }
    );
  },
  // css 相关选项
  css: {
    /* 为预处理器 loader 传递自定义选项 */
    loaderOptions: {
      sass: {
        data: `@import "@/styles/style/common-color.scss";`
      }
    }
  }
};
